#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

const int SIZE=10000;
int fa[SIZE]; //数据大小
int si[SIZE];//所在集合的大小
int dis[SIZE];//该点到根结点的距离

//无权并查集
void init1(int n)//初始化根结点
{
    for(int i=0;i<n;i++)
    {
        fa[i]=i;//根结点为它本身自己
    }
}

int findfa1(int x)//查找x的根节点
{
    if(fa[x]==x) return x;//如果某节点的根节点为它本身，则该点为根结点
    else return fa[x]=findfa1(fa[x]);//否则递归，直到查找到该点，更新所查找的结点的根节点直接是最终的根节点
}

bool comp1(int x,int y)//判断两个结点是否在同一个集合中
{
    return findfa1(x)==findfa1(y);//同一个集合输出ture,否则输出false
}

void merget1(int x,int y)//合并两个集合
{
    fa[findfa1(x)]=findfa1(y);//将y所在集合的根节点赋值给x所在集合的根节点
}

//有权并查集
void init2(int n)//初始化根结点
{
    for(int i=0;i<n;i++)
    {
        fa[i]=i;//根结点为它本身自己
        si[i]=1;//初始的大小1
        dis[i]=0;//初始的距离0
    }
}

int findfa2(int x)//查找x的根节点
{
    if(fa[x]==x) return x;//如果某节点的根节点为它本身，则该点为根结点
    int root=findfa2(fa[x]);//否则递归，直到查找到该点
    dis[x]+=dis[fa[x]];//该节点到根结点的距离等于根结点到新的根节点的距离+本身大小
    return fa[x]=root;//更新所查找的结点的根节点直接是最终的根节点
}

bool comp2(int x,int y)//判断两个结点是否在同一个集合中
{
    return findfa2(x)==findfa2(y);//同一个集合输出ture,否则输出false
}

void merget2(int x,int y)//合并两个集合
{
    int fax=findfa2(x);
    int fay=findfa2(y);
    fa[fax]=fay;//将y所在集合的根节点赋值给x所在集合的根节点
    dis[fax]+=si[fay];//更新该集合根节点到新根节点的距离，该集合中其它结点到新结点的距离由findfa2函数中的 dis[x]+=dis[fa[x]]更新
    si[fay]=si[fax]+si[fay];//更新集合的大小
}

/*
//无权并查集应用
int main()
{
    int n,m,x,y;//n为数据的大小，m为需要合并数据的对数，x,y为需要合并的数据
    cin>>n>>m;
    init1(n);//初始化
    for(int i=0;i<m;i++)
    {
        cin>>x>>y;
        merget1(x,y);//合并数据
    }
    for(int i=0;i<n;i++)
    cout << fa[i]<<" ";//输出数据所在的集合
    return 0;
}
*/

//有权并查集应用
int main()
{
    int n,m,x,y;//n为数据的大小，m为执行的指令条数，x,y为需要合并的数据
    cin>>n>>m;
    init2(n);//初始化
    for(int i=0;i<m;i++)
    {
        char a;
        cin>>a>>x>>y;
        if(a=='H')
        merget2(x,y);//合并数据
        else
        {
        if(findfa2(x)==findfa2(y))
        {
        cout<<abs(dis[x]-dis[y])-1<<endl;
        }
        else
        {
        cout<<"不在同一序列中"<<endl;
        }
        }
    }
    return 0;
}
